/*********************************************************************************************************************
版权所有 (C), 2021,
设计：山亦青
编码：山亦青
版本：V1.0.0.0
完成日期：2021.4.2
说明:
 为了完成屏保功能设计的类
 本文档定义了一个名为ScreenSaverWidget的类
 它和它的子类的对象，在创建时会启动定时，
 当定时达到一定值时，会发出消息，告知绑定者，要进入屏保状态了。
代码级别：u
*********************************************************************************************************************/

#ifndef SCREENSAVERWIDGET_H
#define SCREENSAVERWIDGET_H

#include <QWidget>
#include <QTimer>
#include <QEvent>
#include "Base.h"

class ScreenSaverWidget : public QWidget
{
    Q_OBJECT

public :
    ScreenSaverWidget();

    virtual ~ScreenSaverWidget();

    // 设置屏幕保护功能是否有效
    // 参数1：isEnabled，屏保功能是否启用
    virtual Void_t setScrnSaverEnable(Bool_t isEnabled);

    // 获取屏幕保护功能是否启用
    // 返回值：屏幕保护功能是否启用
    virtual Bool_t getScrnSaverEnable();

    // 设置进入屏幕保护的时间
    // 参数1：timeInSec，进入屏保的时间，单位为秒，0或负数则屏幕保护功能不是能
    virtual Void_t setScrnProtTime(Int32_t timeInSec);

    // 获取进入屏幕保护的时间
    // 返回值：进入屏幕保护的时间，单位为秒。如果是不是能屏幕保护功能，返回-1
    virtual Int32_t getScrnProtTime();

    /*
     * 添加界面组件，被加入该界面的组件，每当有鼠标(触控)事件时，都会复位掉m_NoOperationTimeInSec
     * 此外，本函数是循环遍历子组件，所以只需调用一次，无需循环遍历
     */
    // 参数1：pWidgetToAdd，要添加的组件的指针
    virtual Void_t addWidget(QWidget* pWidgetToAdd);

protected :
    Bool_t eventFilter(QObject *pWatched, QEvent *pEvent);

private :
    QTimer m_ScreenSaverTimer; // 屏幕保护的定时器
    Int32_t m_NoOperationTimeInSec; // 界面没有操作的时间，单位为秒
    Int32_t m_ScrnSaverTimeInSec; // 进入屏幕保护的时间，单位为秒
    Bool_t m_isScrnSaverEnabled; //屏幕保护功能是否启用

    // 循环添加子控件
    Void_t addWidgets(QList<QWidget*>& pWidgetToAdd);

signals:
    void gotoScreenSaver();

public slots:
    void onScreenSaverTimer();
};

#endif // SCREENSAVERWIDGET_H
